﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Tier3CommonDALGloria;

namespace DALGloria.DALGloria
{
    public class PersonalVWDAL: Linq3tierDALBase
    {
        public List<VW_LISTAPERSONAL> BuscarXCriterio(string nombre, string usuario, int cargo, int area, string dni) {

            var Tables = GetTables<VW_LISTAPERSONAL>().ToList();

            var query = (from c in Tables select c);

            if (nombre != ""){
                query = query.Where(c => c.NOMBRE.Contains(nombre));
            }

            if (usuario != "") {
                query = query.Where(c=> c.USUARIO.Contains(usuario));
            }

            if (cargo != 0) {
                query = query.Where(c => c.CODIGOCARGO == cargo);
            }

            if (area != 0)
            {
                query = query.Where(c => c.CODIGOAREA == area);
            }

            if (dni != "") {
                query = query.Where(c => c.DNI.Contains(dni));
            }

            List<VW_LISTAPERSONAL> lista = query.ToList();

            return lista;
        }

        public List<VW_MAPERSONAL> BuscarTodoPersonal() {
            var Tables = GetTables<VW_MAPERSONAL>();

            var query = (from c in Tables select c);

            query = query.Where(c => c.ACTIVO_INACTIVO == 'A');

            return query.ToList();
        }

        public void EliminarPersonal(int codigo)
        {
            var Tables = GetTables<VW_MAPERSONAL>();

            List<VW_MAPERSONAL> listaPersonal = (from c in Tables where c.CODIGOPERSONAL == codigo select c).ToList();

            listaPersonal[0].ACTIVO_INACTIVO = 'I';

            Save();
        }

        public List<VW_MAPERSONAL> BuscarXDNI(int dni)
        {
            var Tables = GetTables<VW_MAPERSONAL>();

            var query = (from c in Tables select c);

            //if (dni != 0) {
            //    query = query.Where(c => Convert.ToInt32(c.) == dni);
            //}

            query = query.Where(c => c.ACTIVO_INACTIVO == 'A');

            return query.ToList();
        }

        public List<VW_MAPERSONAL> BuscarXUsuario(string usuario)
        {
            var Tables = GetTables<VW_MAPERSONAL>();

            var query = (from c in Tables select c);

            if (usuario != "") {
                query = query.Where(c => c.USUARIO.Contains(usuario));
            }

            query = query.Where(c => c.ACTIVO_INACTIVO == 'A');

            return query.ToList();
        }

        public int RegistrarTag(string codigoTag, string usuario, DateTime fechainicio, DateTime fechafin, string nombre)
        {
            int ingreso = 1;

            VW_MAPERSONAL fila = new VW_MAPERSONAL();

            fila.NOMBRE = nombre;
            fila.USUARIO = usuario;
            fila.FECHAINICIAL = fechainicio;
            fila.FECHAFINAL = fechafin;

            int numceros = 24 - codigoTag.Length;
            string cadena = "";

            for (int i = 1; i <= numceros;i++ )
            {
                cadena += "0";
            }

            fila.CODIGOTAG = cadena + codigoTag;           
            fila.ACTIVO_INACTIVO = 'A';

            if (existeTag(fila.CODIGOTAG))
            {
                ingreso = 0;
            }
            else {
                Save(fila);
            }

            return ingreso;
        }

        public void Save(VW_MAPERSONAL fila)
        {
            var Tables = GetTables<VW_MAPERSONAL>();
            Tables.InsertOnSubmit(fila);
            this.Save();
        }

        public bool existeTag(string codigoTag)
        {
            var Tables = GetTables<VW_MAPERSONAL>();

            var query = (from c in Tables select c);

            query = query.Where(c => c.CODIGOTAG == codigoTag);

            query = query.Where(c => c.ACTIVO_INACTIVO == 'A');

            List<VW_MAPERSONAL> listaPersonal = query.ToList();

            if (listaPersonal.Count == 0)
            {
                return false;
            }
            else {
                return true;
            }
        }

        public void EliminarxFecha(DateTime fechaActual)
        {
            var Tables = GetTables<VW_MAPERSONAL>();

            var query = (from c in Tables select c);

            query = query.Where(c => c.FECHAINICIAL <= fechaActual);

            List<VW_MAPERSONAL> listaPersonal = new List<VW_MAPERSONAL>();

            listaPersonal = query.ToList();

            foreach (var c in listaPersonal) {
                c.ACTIVO_INACTIVO = 'A';
            }

            Save();
        }

        
    }
}
